package dao

import (
	"github.com/crack007/go-im/src/common/entity"
	"github.com/crack007/go-im/src/common/util"
	"gorm.io/gorm"
)

type messageDao struct {
	Db *gorm.DB
}

func (d *messageDao) Save(messageEntity *entity.MessageEntity) {
	messageEntity.SessionID = util.MakeSessionId(messageEntity.FromUID, messageEntity.ToUID)
	d.Db.Save(messageEntity)
}

func (d *messageDao) Delete(messageEntity *entity.MessageEntity) {
	messageEntity.IsDelete = true
	messageEntity.UpdatedAt = util.GetDatetime()
	d.Db.Save(messageEntity)
}

func (d *messageDao) List(fromUid uint32, toUid uint32, id int64, page uint32, size uint32) []*entity.MessageEntity {
	var list []*entity.MessageEntity
	d.Db.Where("is_delete=0 and session_id=? and id>?", util.MakeSessionId(fromUid, toUid), id).
		Order("id desc").
		Offset(int((page - 1) * size)).
		Limit(int(size)).
		Find(&list)
	return list
}
